import { Dialog } from 'vant'
// import { globalIcon } from '@/utils/image'

// 获取渲染出来的文字所占宽度
const getMessageWidth = function (options) {
  let element = document.createElement('div')
  const fontSize = String(options.messageFontSize || '14').includes('px') ? parseInt(options.messageFontSize || '14') : options.messageFontSize || '14'
  element.setAttribute('style', `font-size: ${fontSize}px; position: absolute; top: -999px;`)
  element.innerHTML = options.message
  document.body.appendChild(element)
  const offsetWidth = element.offsetWidth
  element.parentNode.removeChild(element)
  return offsetWidth
}

/**
 * 弹窗二次封装，具体配置见文档https://vant-contrib.gitee.io/vant/v2/#/zh-CN/dialog
 * 仅集成了图片展示，和按钮风格
 * @param options
 * @returns {Promise<void>}
 */
export default async (options) => {
  let innerHtml = ''
  options.width = options.width || '250px'
  // 如果传了图片,并且在图片工具类里面存在该图片
  // if (options.image && globalIcon.hasOwnProperty(options.image)) {
  //   innerHtml += `<div class="img-wrap">
  //                   <img src="${globalIcon[options.image]}" alt="">
  //                 </div>`
  // }
  if (options.messageTitle) {
    innerHtml += `<h3 class="message-title" style="color: ${options.messageTitleColor || 'inherit'}">${options.messageTitle}</h3>`
  }
  innerHtml += `<p class="message-content" style="font-size: ${options.messageFontSize || 'inherit'}">${options.message}</p>`
  if (options.autoTextAlign) {
    // 文字实际宽度大于消息框内容的宽度，36为内边距padding的值
    const messageWidth = getMessageWidth(options) + 36
    if (messageWidth > parseInt(options.width)) {
      options.messageAlign = 'left'
    }
  }
  const className = `common-dialog ${options.className}`
  const dialogOptions = {
    ...options,
    // 文本内容，默认开启富文本
    message: innerHtml,
    // 自定义类名
    className,
    // 关闭前的回调函数，调用 done() 后关闭弹窗，调用 done(false) 阻止弹窗关闭
    beforeClose: (action, done) => {
      if (options.beforeClose && typeof options.beforeClose === 'function') {
        options.beforeClose(action, done)
      } else {
        done()
      }
    }
  }
  await Dialog.alert(dialogOptions)
}
